package cn.edu.jmu.oelp.repository;

import cn.edu.jmu.oelp.pojo.Entity;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 对标注实体的常用增删改查
 * @author damao
 */
@Repository
public interface EntityRepository extends Neo4jRepository<Entity,Long> {
    /**
     *
     * @param articleId 文章id
     * @return 返回该文章的所有标注列表
     */
    List<Entity> findByArticleId(int articleId);

    /**
     *
     * @param articleId 文章id
     * @param paraId 在该文章的段落id
     * @return 返回该文章该段落的所有标注列表
     */
    List<Entity> findByArticleIdAndParagraphsId(int articleId, int paraId);

    /**
     *
     * @param articleId
     * @param paraId
     * @param userId
     * @return 返回该用户在该文章该段落的所有标注列表
     */
    List<Entity> findByArticleIdAndParagraphsIdAndUserId(int articleId, int paraId, int userId);

    /**
     * 通过标注实体在neo4j中的id查找实体
     * @param id 标注实体在neo4j中的id
     * @return 返回该标注实体
     */
    Entity findById(long id);

    /**
     * 通过标注实体在mysql中的id查找实体
     * @param EntityId 标注实体在mysql表中的id
     * @return 返回该标注实体
     */
    Entity findByEntityId(long EntityId);

    /**
     *
     * @param content 标注实体的内容
     * @return 返回标注实体列表
     */
    Entity findByContent(String content);

    /**
     *
     * @param articleId
     * @param paraId
     * @param content
     * @return
     */
    Entity findByArticleIdAndParagraphsIdAndContentAndUserId(int articleId, int paraId, String content, int userId);

    /**
     *
     * @param type 标注实体的标注类型
     * @return 返回所有该类型的标注实体列表
     */
    List<Entity> findByType(String type);

    /**
     * 返回所有标注实体
     * @return
     */
    List<Entity> findAll();

}
